Schritt 17: Das Netzwerk im Heat
Vorwort
Im letzten Schritt war ein individueller Parameter das Ziel und in diesem das komplette Netzwerk.
Das Template
Um nicht bei Null zu starten, dient das Template aus dem vorigen Schritt als Vorlage.
Wichtig ist dabei, dass direkt ein neuer Parameter hinzufügt wird, genauer die ID des öffentlichen Netzwerks:
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk
Nachdem dieser Parameter eingefügt wurde, ist es Zeit das Netzwerk in das Template einzufügen.
Hierbei handelt es sich um eine weitere Ressource und wird unter dem Punkt resources
eingefügt.
Der zugehörige Typ lautet OS::Neutron::Net
:
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk:
type: OS::Neutron::Net
properties:
name: BeispielNetzwerk
Der Port
Der nächste Schritt ist dann der Port, der Typ lautet dafür OS::Neutron::Port
.
Wichtig ist, dass der Port in das bestehende Netzwerk eingegliedert wird und die Instanz dem Port zuzuordnen ist.
Um dies zu erreichen, wird erneut ein get Befehl genutzt und statt dem Parameter eine Ressource eingebunden:
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk:
type: OS::Neutron::Net
properties:
name: BeispielNetzwerk
Port:
type: OS::Neutron::Port
properties:
network: { get_resource: Netzwerk }
Der Router
Nachdem Netzwerk und Port, wird nun ein Router (Typ = OS::Neutron::Router
) in das Template eingebunden.
Bei diesem Typ ist es wichtig, das öffentliche Netzwerk einzubinden:
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk:
type: OS::Neutron::Net
properties:
name: BeispielNetzwerk
Port:
type: OS::Neutron::Port
properties:
network: { get_resource: Netzwerk }
Router:
type: OS::Neutron::Router
properties:
external_gateway_info: { "network": { get_param: public_network_id }
name: BeispielRouter
Das Subnet
Der vorletzte Schritt ist das Subnet (Typ = OS::Neutron::Subnet
)
In selbigem werden eigene Nameserver eintragen, die Informationen des Netzwerks eingebunden, die IP-Version sowie der IP-Adressraum festgelegt und die verfügbaren IPs definiert:
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk:
type: OS::Neutron::Net
properties:
name: BeispielNetzwerk
Port:
type: OS::Neutron::Port
properties:
network: { get_resource: Netzwerk }
Router:
type: OS::Neutron::Router
properties:
external_gateway_info: { "network": { get_param: public_network_id }
name: BeispielRouter
Subnet:
type: OS::Neutron::Subnet
properties:
name: BeispielSubnet
dns_nameservers:
- 8.8.8.8
- 8.8.4.4
network: { get_resource: Netzwerk }
ip_version: 4
cidr: 10.0.0.0/24
allocation_pools:
- { start: 10.0.0.10, end: 10.0.0.250 }
Subnet Bridge
Im letzten Schritt wird eine Subnet Bridge (Typ = OS::Neutron::RouterInterface
) angelegt, also eine Brücke zwischen Router und Subnet.
Auch gibt es hier eine weitere neue Komponente, genauer depends_on
.
Damit können wir Resource erstellen lassen, die nur dann gebaut werden, wenn es die referenzierte Resource auch gibt.
In unserem Beispiel wird die Bridge zwischen Subnet und Router nur gebaut, wenn es auch ein Subnet gibt.
heat_template_version: 2014-10-16
parameters:
key_name:
type: string
public_network_id:
type: string
default: provider
resources:
Instanz:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: Ubuntu 16.04 Xenial Xerus - Latest
flavor: m1.small
Netzwerk:
type: OS::Neutron::Net
properties:
name: BeispielNetzwerk
Port:
type: OS::Neutron::Port
properties:
network: { get_resource: Netzwerk }
Router:
type: OS::Neutron::Router
properties:
external_gateway_info: { "network": { get_param: public_network_id } }
name: BeispielRouter
Subnet:
type: OS::Neutron::Subnet
properties:
name: BeispielSubnet
dns_nameservers:
- 8.8.8.8
- 8.8.4.4
network: { get_resource: Netzwerk }
ip_version: 4
cidr: 10.0.0.0/24
allocation_pools:
- { start: 10.0.0.10, end: 10.0.0.250 }
Router_Subnet_Bridge:
type: OS::Neutron::RouterInterface
depends_on: Subnet
properties:
router: { get_resource: Router }
subnet: { get_resource: Subnet }
Abschluss
Nachdem nun das komplette Netzwerk eingerichtet wurde, wird im nächsten Schritt eine eigene Security Group erstellt und zusätzlich der Instanz eine öffentliche IP-Adresse zugewiesen.